home *** CD-ROM | disk | FTP | other *** search
- /* multiargs : à utiliser avec ToolManager par exemple
- multiargs <programme> <arg1> <arg2> ... <argn>
- lance - programme <arg1>
- - programme <arg2>
- ...
- - programme <argn>.
- <programme> peut aussi être une ligne de commande complexe placée entre
- guillemets; si elle contient %%, cela indique l'endroit où sera placé
- l'argument. */
-
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
-
- int main(int argc, char *argv[]) {
-
- /* FILE *fout = fopen("raw:", "w");*/
-
- static char ligne[2048];
-
- if (--argc < 1 || !strcmp(argv[1], "?")) {
- puts ("multiargs <programme> <arg1> <arg2> ... <argn>\n"
- "lance programme <arg1>\n"
- " programme <arg2>\n"
- " ...\n"
- " programme <argn>.\n"
- "<programme> peut aussi être une ligne de commande complexe placée entre\n"
- "guillemets; si elle contient %%, cela indique l'endroit où sera placé\n"
- "l'argument.");
- return 0;
- }
-
- char *commande = *(argv + 1);
- char ligne[256];
- char *p = commande;
- char *q = ligne;
-
- int quote = *p == '\"';
- if (quote)
- p++;
-
- while (*p && (*p != '%' || *(p + 1) != '%') && (!quote || *p != '\"'))
- *q++ = *p++;
-
- if (*p == '%')
- p += 2;
- else
- *q++ = ' ';
-
- char **argument = argv + 2;
-
- while (--argc) {
- int valret;
- char *r = q;
-
- char *s = *argument;
- if (*s != '\"')
- *r++ = '\"';
- while (*s)
- *r++ = *s++;
- if (*(s - 1) != '\"')
- *r++ = '\"';
-
- s = p;
- while (*s && (!quote || *s != '\"'))
- *r++ = *s++;
-
- *r = '\0';
- /* fprintf(fout, "%s\n", ligne);*/
- if ((valret = system(ligne)) >= 10)
- return valret;
-
- ++argument;
- }
-
- /* fflush(fout);
- system("wait 20");
- fclose(fout);
- */
- return 0;
- }
-